Linux Kernel 是我們啟動的最後一個步驟,在這個步驟我們需要去掛載 roofs , bootfs ,還有設備樹的設置,只有當設備樹都正確配置後,我們的板子所有的周邊設備才能正確地運作。最後我們才可以去開發Driver 等等。
例如我們常見的 ETH , I2C , SPI 等等,所有的通訊界面都會是在這邊做配置,而前面的三個階段 tf-a , optee , uboot ,則是依照需要來去做設定,例如電源IC 跟 I2C 假如在 tf-a 階段需要的話,則需要去配置他。
Linux kernel負責控制主機的所有硬體並提供系統所需要的功能,開機的時候,利用開機管理程式啟動kernel來偵測硬體並載入適當的驅動程式,這樣系統才可以順利的運作。
在開機服務當中又會分為兩種 , sysD 與 sysV 兩種差異可以上網搜尋一下。
主要 sysV 透過腳本的方式,並且是有序的去啟動。sysD 則是導入了 service 概念,並且可以實現進程保護。將每一個所需要的功能編寫成一個 .service 檔案,來去做管理與使用。
幫我們輸入指令從遠端倉庫拉下 linux-kernel 的檔案後會向下圖這樣,一剛開始我們最常需要修改的會是 devicetree。
devtool modify linux-stm32mp
# 這個指令會從遠端拉下 stm32mp 所建置的 kernel 檔案
# 後續我們就可以透過這包檔案修改,並且最後存成 patch 編譯使用。
devicetree 所在的位置在 arch/arm/boot/dts 底下,這邊除了 st 的 dts 以外 ,常見的MPU的dts 也會存放在這。
# 當我們修改完檔案,或是希望回歸到未修改的狀態,可以輸入下方指令。
# 會將 workspace / source 底下相關的檔案給清除
devtool reset linux-st32mp
後續會在說明有關 dts 的語法等等,這篇文章主要說明如何去拉遠端檔案,以及用途跟相關檔案位置。